package de.hdu.tennis.dao;

import java.util.List;

import org.apache.log4j.Logger;
import org.junit.Test;


import de.hdu.tennis.model.Mitglied;

public class MitgliedDaoTest extends AbstractDataAccessTest {

	public static Logger Log = Logger.getLogger(MitgliedDaoTest.class);

	public static void setLog(Logger log) {
		Log = log;
	}

//	private MitgliedDao mitgliedDao = null;
	private MitgliedDao mitgliedDao;
	private String tableName = "tbl_mitglied";
	
	public MitgliedDao getMitgliedDao(){
		return mitgliedDao;
	}
	
	
	public void setMitgliedDao(MitgliedDao mitgliedDao) {
		this.mitgliedDao = mitgliedDao;
	}



	@SuppressWarnings("deprecation")
	@Test
	public void testFindById() throws Exception {
//		Log.info("UnitTest - Mitarbeiter - FindById");
		String[] tables = { tableName };
		deleteFromTables(tables);
		Mitglied mitglied = new Mitglied();
		mitglied.setNachname("Mustermann");
		mitglied.setVorname("Max");
		mitglied.setStrasse("Bahnhofweg 2");
		mitglied.setPlz("94125");
		mitglied.setOrt("Deggendorf");
		mitglied.setTelefon("0941 25846");
		mitglied.setEmail("maxmustermann@gmx.de");
		mitglied.setPasswort("123");
		mitglied.setIsAdmin(true);
		mitgliedDao.save(mitglied);
		List<Mitglied> alleMitglieder = mitgliedDao.findAll();
		for (Mitglied m : alleMitglieder) {
			int id = m.getId();
			Mitglied found = mitgliedDao.findById(id);
			assertEquals(m.getNachname(), mitglied.getNachname());
			assertEquals(m.getVorname(), mitglied.getVorname());
			assertEquals(m.getStrasse(), mitglied.getStrasse());
			assertEquals(m.getPlz(), mitglied.getPlz());
			assertEquals(m.getOrt(), mitglied.getOrt());
			assertEquals(m.getTelefon(), mitglied.getTelefon());
			assertEquals(m.getEmail(), mitglied.getEmail());
			assertEquals(m.getPasswort(), mitglied.getPasswort());
			assertEquals(m.getIsAdmin(), mitglied.getIsAdmin());
		}
		deleteFromTables(tables);
		
	}

	@Test
	public void testFindAll() throws Exception {
		Log.info("UnitTest - Mitarbeiter - FindAll");
		// Wurde bereits in testFindById() getestet
		testFindById();
	}

	@SuppressWarnings("deprecation")
	@Test
	public void testSave() throws Exception {
		Log.info("UnitTest - Mitarbeiter - Save");
		String[] tables = { tableName };
		deleteFromTables(tables);
		Mitglied mitglied = new Mitglied();
		mitglied.setNachname("Mustermann");
		mitglied.setVorname("Max");
		mitglied.setStrasse("Bahnhofweg 2");
		mitglied.setPlz("94125");
		mitglied.setOrt("Deggendorf");
		mitglied.setTelefon("0941 25846");
		mitglied.setEmail("maxmustermann@gmx.de");
		mitglied.setPasswort("123");
		mitglied.setIsAdmin(true);
		mitgliedDao.save(mitglied);
		int rows = countRowsInTable(tableName);
		assertEquals("Es darf nur eine Zeile vorhanden sein", 1, rows);

		deleteFromTables(tables);
	
	}

	@SuppressWarnings("deprecation")
	@Test
	public void testIsAdmin() throws Exception {
		Log.info("UnitTest - Mitarbeiter - IsAdmin");
		String[] tables = { tableName };
		deleteFromTables(tables);
		Mitglied mitglied = new Mitglied();
		mitglied.setNachname("Mustermann");
		mitglied.setVorname("Max");
		mitglied.setStrasse("Bahnhofweg 2");
		mitglied.setPlz("94125");
		mitglied.setOrt("Deggendorf");
		mitglied.setTelefon("0941 25846");
		mitglied.setEmail("maxmustermann@gmx.de");
		mitglied.setPasswort("123");
		mitglied.setIsAdmin(true);
		mitgliedDao.save(mitglied);
		try {
			Boolean isAdmin = mitglied.getIsAdmin();
			assertFalse(isAdmin);
		} catch (Exception e) {
			Log.info("Exception: " + e.getMessage());
		}
		deleteFromTables(tables);

	}
}


